package hu.bme.mit.androtext.age.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import hu.bme.mit.androtext.age.services.AgeGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalAgeParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'AndroidApplication'", "'{'", "'projectName'", "'package'", "'datamodel'", "'uimodel'", "'}'", "'.'"
    };
    public static final int RULE_ID=5;
    public static final int RULE_STRING=4;
    public static final int T__16=16;
    public static final int T__15=15;
    public static final int T__18=18;
    public static final int T__17=17;
    public static final int T__12=12;
    public static final int T__11=11;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int RULE_ANY_OTHER=10;
    public static final int RULE_INT=6;
    public static final int RULE_WS=9;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;

    // delegates
    // delegators


        public InternalAgeParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalAgeParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalAgeParser.tokenNames; }
    public String getGrammarFileName() { return "../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g"; }



     	private AgeGrammarAccess grammarAccess;
     	
        public InternalAgeParser(TokenStream input, AgeGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "AndroidApplication";	
       	}
       	
       	@Override
       	protected AgeGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleAndroidApplication"
    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:67:1: entryRuleAndroidApplication returns [EObject current=null] : iv_ruleAndroidApplication= ruleAndroidApplication EOF ;
    public final EObject entryRuleAndroidApplication() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAndroidApplication = null;


        try {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:68:2: (iv_ruleAndroidApplication= ruleAndroidApplication EOF )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:69:2: iv_ruleAndroidApplication= ruleAndroidApplication EOF
            {
             newCompositeNode(grammarAccess.getAndroidApplicationRule()); 
            pushFollow(FOLLOW_ruleAndroidApplication_in_entryRuleAndroidApplication75);
            iv_ruleAndroidApplication=ruleAndroidApplication();

            state._fsp--;

             current =iv_ruleAndroidApplication; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAndroidApplication85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAndroidApplication"


    // $ANTLR start "ruleAndroidApplication"
    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:76:1: ruleAndroidApplication returns [EObject current=null] : (otherlv_0= 'AndroidApplication' ( (lv_applicationName_1_0= RULE_STRING ) ) otherlv_2= '{' otherlv_3= 'projectName' ( (lv_projectName_4_0= ruleFQN ) ) otherlv_5= 'package' ( (lv_packageName_6_0= ruleFQN ) ) (otherlv_7= 'datamodel' ( (otherlv_8= RULE_ID ) ) )? otherlv_9= 'uimodel' ( (otherlv_10= RULE_ID ) ) otherlv_11= '}' ) ;
    public final EObject ruleAndroidApplication() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_applicationName_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        AntlrDatatypeRuleToken lv_projectName_4_0 = null;

        AntlrDatatypeRuleToken lv_packageName_6_0 = null;


         enterRule(); 
            
        try {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:79:28: ( (otherlv_0= 'AndroidApplication' ( (lv_applicationName_1_0= RULE_STRING ) ) otherlv_2= '{' otherlv_3= 'projectName' ( (lv_projectName_4_0= ruleFQN ) ) otherlv_5= 'package' ( (lv_packageName_6_0= ruleFQN ) ) (otherlv_7= 'datamodel' ( (otherlv_8= RULE_ID ) ) )? otherlv_9= 'uimodel' ( (otherlv_10= RULE_ID ) ) otherlv_11= '}' ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:80:1: (otherlv_0= 'AndroidApplication' ( (lv_applicationName_1_0= RULE_STRING ) ) otherlv_2= '{' otherlv_3= 'projectName' ( (lv_projectName_4_0= ruleFQN ) ) otherlv_5= 'package' ( (lv_packageName_6_0= ruleFQN ) ) (otherlv_7= 'datamodel' ( (otherlv_8= RULE_ID ) ) )? otherlv_9= 'uimodel' ( (otherlv_10= RULE_ID ) ) otherlv_11= '}' )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:80:1: (otherlv_0= 'AndroidApplication' ( (lv_applicationName_1_0= RULE_STRING ) ) otherlv_2= '{' otherlv_3= 'projectName' ( (lv_projectName_4_0= ruleFQN ) ) otherlv_5= 'package' ( (lv_packageName_6_0= ruleFQN ) ) (otherlv_7= 'datamodel' ( (otherlv_8= RULE_ID ) ) )? otherlv_9= 'uimodel' ( (otherlv_10= RULE_ID ) ) otherlv_11= '}' )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:80:3: otherlv_0= 'AndroidApplication' ( (lv_applicationName_1_0= RULE_STRING ) ) otherlv_2= '{' otherlv_3= 'projectName' ( (lv_projectName_4_0= ruleFQN ) ) otherlv_5= 'package' ( (lv_packageName_6_0= ruleFQN ) ) (otherlv_7= 'datamodel' ( (otherlv_8= RULE_ID ) ) )? otherlv_9= 'uimodel' ( (otherlv_10= RULE_ID ) ) otherlv_11= '}'
            {
            otherlv_0=(Token)match(input,11,FOLLOW_11_in_ruleAndroidApplication122); 

                	newLeafNode(otherlv_0, grammarAccess.getAndroidApplicationAccess().getAndroidApplicationKeyword_0());
                
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:84:1: ( (lv_applicationName_1_0= RULE_STRING ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:85:1: (lv_applicationName_1_0= RULE_STRING )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:85:1: (lv_applicationName_1_0= RULE_STRING )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:86:3: lv_applicationName_1_0= RULE_STRING
            {
            lv_applicationName_1_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleAndroidApplication139); 

            			newLeafNode(lv_applicationName_1_0, grammarAccess.getAndroidApplicationAccess().getApplicationNameSTRINGTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getAndroidApplicationRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"applicationName",
                    		lv_applicationName_1_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleAndroidApplication156); 

                	newLeafNode(otherlv_2, grammarAccess.getAndroidApplicationAccess().getLeftCurlyBracketKeyword_2());
                
            otherlv_3=(Token)match(input,13,FOLLOW_13_in_ruleAndroidApplication168); 

                	newLeafNode(otherlv_3, grammarAccess.getAndroidApplicationAccess().getProjectNameKeyword_3());
                
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:110:1: ( (lv_projectName_4_0= ruleFQN ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:111:1: (lv_projectName_4_0= ruleFQN )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:111:1: (lv_projectName_4_0= ruleFQN )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:112:3: lv_projectName_4_0= ruleFQN
            {
             
            	        newCompositeNode(grammarAccess.getAndroidApplicationAccess().getProjectNameFQNParserRuleCall_4_0()); 
            	    
            pushFollow(FOLLOW_ruleFQN_in_ruleAndroidApplication189);
            lv_projectName_4_0=ruleFQN();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getAndroidApplicationRule());
            	        }
                   		set(
                   			current, 
                   			"projectName",
                    		lv_projectName_4_0, 
                    		"FQN");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_5=(Token)match(input,14,FOLLOW_14_in_ruleAndroidApplication201); 

                	newLeafNode(otherlv_5, grammarAccess.getAndroidApplicationAccess().getPackageKeyword_5());
                
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:132:1: ( (lv_packageName_6_0= ruleFQN ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:133:1: (lv_packageName_6_0= ruleFQN )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:133:1: (lv_packageName_6_0= ruleFQN )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:134:3: lv_packageName_6_0= ruleFQN
            {
             
            	        newCompositeNode(grammarAccess.getAndroidApplicationAccess().getPackageNameFQNParserRuleCall_6_0()); 
            	    
            pushFollow(FOLLOW_ruleFQN_in_ruleAndroidApplication222);
            lv_packageName_6_0=ruleFQN();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getAndroidApplicationRule());
            	        }
                   		set(
                   			current, 
                   			"packageName",
                    		lv_packageName_6_0, 
                    		"FQN");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:150:2: (otherlv_7= 'datamodel' ( (otherlv_8= RULE_ID ) ) )?
            int alt1=2;
            int LA1_0 = input.LA(1);

            if ( (LA1_0==15) ) {
                alt1=1;
            }
            switch (alt1) {
                case 1 :
                    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:150:4: otherlv_7= 'datamodel' ( (otherlv_8= RULE_ID ) )
                    {
                    otherlv_7=(Token)match(input,15,FOLLOW_15_in_ruleAndroidApplication235); 

                        	newLeafNode(otherlv_7, grammarAccess.getAndroidApplicationAccess().getDatamodelKeyword_7_0());
                        
                    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:154:1: ( (otherlv_8= RULE_ID ) )
                    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:155:1: (otherlv_8= RULE_ID )
                    {
                    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:155:1: (otherlv_8= RULE_ID )
                    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:156:3: otherlv_8= RULE_ID
                    {

                    			if (current==null) {
                    	            current = createModelElement(grammarAccess.getAndroidApplicationRule());
                    	        }
                            
                    otherlv_8=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAndroidApplication255); 

                    		newLeafNode(otherlv_8, grammarAccess.getAndroidApplicationAccess().getDataAndroDataRootCrossReference_7_1_0()); 
                    	

                    }


                    }


                    }
                    break;

            }

            otherlv_9=(Token)match(input,16,FOLLOW_16_in_ruleAndroidApplication269); 

                	newLeafNode(otherlv_9, grammarAccess.getAndroidApplicationAccess().getUimodelKeyword_8());
                
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:171:1: ( (otherlv_10= RULE_ID ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:172:1: (otherlv_10= RULE_ID )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:172:1: (otherlv_10= RULE_ID )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:173:3: otherlv_10= RULE_ID
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getAndroidApplicationRule());
            	        }
                    
            otherlv_10=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAndroidApplication289); 

            		newLeafNode(otherlv_10, grammarAccess.getAndroidApplicationAccess().getUiAndroNavRootCrossReference_9_0()); 
            	

            }


            }

            otherlv_11=(Token)match(input,17,FOLLOW_17_in_ruleAndroidApplication301); 

                	newLeafNode(otherlv_11, grammarAccess.getAndroidApplicationAccess().getRightCurlyBracketKeyword_10());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAndroidApplication"


    // $ANTLR start "entryRulePlainString"
    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:198:1: entryRulePlainString returns [EObject current=null] : iv_rulePlainString= rulePlainString EOF ;
    public final EObject entryRulePlainString() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePlainString = null;


        try {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:199:2: (iv_rulePlainString= rulePlainString EOF )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:200:2: iv_rulePlainString= rulePlainString EOF
            {
             newCompositeNode(grammarAccess.getPlainStringRule()); 
            pushFollow(FOLLOW_rulePlainString_in_entryRulePlainString339);
            iv_rulePlainString=rulePlainString();

            state._fsp--;

             current =iv_rulePlainString; 
            match(input,EOF,FOLLOW_EOF_in_entryRulePlainString349); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePlainString"


    // $ANTLR start "rulePlainString"
    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:207:1: rulePlainString returns [EObject current=null] : ( (lv_value_0_0= RULE_STRING ) ) ;
    public final EObject rulePlainString() throws RecognitionException {
        EObject current = null;

        Token lv_value_0_0=null;

         enterRule(); 
            
        try {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:210:28: ( ( (lv_value_0_0= RULE_STRING ) ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:211:1: ( (lv_value_0_0= RULE_STRING ) )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:211:1: ( (lv_value_0_0= RULE_STRING ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:212:1: (lv_value_0_0= RULE_STRING )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:212:1: (lv_value_0_0= RULE_STRING )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:213:3: lv_value_0_0= RULE_STRING
            {
            lv_value_0_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rulePlainString390); 

            			newLeafNode(lv_value_0_0, grammarAccess.getPlainStringAccess().getValueSTRINGTerminalRuleCall_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getPlainStringRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"value",
                    		lv_value_0_0, 
                    		"STRING");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePlainString"


    // $ANTLR start "entryRuleFQN"
    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:239:1: entryRuleFQN returns [String current=null] : iv_ruleFQN= ruleFQN EOF ;
    public final String entryRuleFQN() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleFQN = null;


        try {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:240:2: (iv_ruleFQN= ruleFQN EOF )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:241:2: iv_ruleFQN= ruleFQN EOF
            {
             newCompositeNode(grammarAccess.getFQNRule()); 
            pushFollow(FOLLOW_ruleFQN_in_entryRuleFQN433);
            iv_ruleFQN=ruleFQN();

            state._fsp--;

             current =iv_ruleFQN.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleFQN444); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleFQN"


    // $ANTLR start "ruleFQN"
    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:248:1: ruleFQN returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) ;
    public final AntlrDatatypeRuleToken ruleFQN() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;

         enterRule(); 
            
        try {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:251:28: ( (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:252:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:252:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:252:6: this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )*
            {
            this_ID_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFQN484); 

            		current.merge(this_ID_0);
                
             
                newLeafNode(this_ID_0, grammarAccess.getFQNAccess().getIDTerminalRuleCall_0()); 
                
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:259:1: (kw= '.' this_ID_2= RULE_ID )*
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( (LA2_0==18) ) {
                    alt2=1;
                }


                switch (alt2) {
            	case 1 :
            	    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:260:2: kw= '.' this_ID_2= RULE_ID
            	    {
            	    kw=(Token)match(input,18,FOLLOW_18_in_ruleFQN503); 

            	            current.merge(kw);
            	            newLeafNode(kw, grammarAccess.getFQNAccess().getFullStopKeyword_1_0()); 
            	        
            	    this_ID_2=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFQN518); 

            	    		current.merge(this_ID_2);
            	        
            	     
            	        newLeafNode(this_ID_2, grammarAccess.getFQNAccess().getIDTerminalRuleCall_1_1()); 
            	        

            	    }
            	    break;

            	default :
            	    break loop2;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleFQN"

    // Delegated rules


 

    public static final BitSet FOLLOW_ruleAndroidApplication_in_entryRuleAndroidApplication75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAndroidApplication85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_ruleAndroidApplication122 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleAndroidApplication139 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleAndroidApplication156 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleAndroidApplication168 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_ruleFQN_in_ruleAndroidApplication189 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleAndroidApplication201 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_ruleFQN_in_ruleAndroidApplication222 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_15_in_ruleAndroidApplication235 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAndroidApplication255 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleAndroidApplication269 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAndroidApplication289 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_17_in_ruleAndroidApplication301 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePlainString_in_entryRulePlainString339 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePlainString349 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_STRING_in_rulePlainString390 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleFQN_in_entryRuleFQN433 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleFQN444 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFQN484 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleFQN503 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFQN518 = new BitSet(new long[]{0x0000000000040002L});

}